#ifndef APP_INI_FILE_H
#define APP_INI_FILE_H

#include <QtCore>

//统一处理ini/xntransrv.ini文件的读取和写入
class CAppIniFile
{
public:
    CAppIniFile();
    ~CAppIniFile();

    CAppIniFile(const CAppIniFile& that);
    CAppIniFile& operator=(const CAppIniFile& that);

    void CopyFrom(const CAppIniFile* pthat);

    void Clear();

    bool operator==(const CAppIniFile& that);
    bool operator!=(const CAppIniFile& that);

    void ReadFromIniFile();

    //获取描述信息
    QString GetRemark();

public:
    bool GetIsPrintToConsole();
    void SetIsPrintToConsole(bool bIsPrintToConsole);

    bool GetIsWriteLog();
    void SetIsWrieLog(bool bIsWriteLog);

    int GetLogFileMaxSize();
    void SetLogFileMaxSize(int iLogFileMaxSize);

    int GetLogFileNameType();
    void SetLogFileNameType(int iLogFileNameType);

    ushort GetPort();
    int GetIdleTime();
    uchar GetModbusAddOffset();
    int GetProjectMode();

private:
    //验证变量的值范围(小于最小值则取最小值,大于最大值则取最大值)
    void CheckUlonglongRange(qulonglong& ulValue, qulonglong ulMinValue, qulonglong ulMaxValue);
    void CheckIntRange(int& iValue, int iMinValue, int iMaxValue);

private:
    bool                m_bIsPrintToConsole;    //是否打印输出到终端控制台,true打印,false不打印
    bool                m_bIsWriteLog;          //是否写日志（调试时使用设为1,正式运行时设为0）
    int                 m_iLogFileMaxSize;      //日志文件最大大小,单位为兆,范围为1~30,默认为5
    //文件名称类型,0为abc.log,1为abc(yyyy).log,2为abc(yyyyMM).log,3为abc(yyyyMMdd).log,默认为0
    int                 m_iLogFileNameType;

    ushort              m_usPort;               //ModbusTcp主站监听端口
    int                 m_iIdleTime;            //空闲时间
    uchar               m_uaModbusAddrOffset; // 地址偏移量
    // #项目模式,默认为0
    // #0,通用项目
    // #1,富仁项目--给第三方EMS提供液冷数据,动环测量(Modbus地址从101,输入寄存器,功能码0x04,共13个UINT16数据,寄存器地址为201~213)
    // #2,海得项目
    // #--提供电表,动环测量(Modbus地址从101,输入寄存器,功能码0x04,共32个FLOAT数据,寄存器地址为201~264)
    // #--提供液冷,动环测量(Modbus地址从101,输入寄存器,功能码0x04,共4个UINT16数据,寄存器地址为301~304)
    // #--提供液冷,动环测量(Modbus地址从101,输入寄存器,功能码0x04,共8个FLOAT数据,寄存器地址为311~326)
    // #--提供PCS的UNIT16数据(Modbus地址从200,输入寄存器,功能码0x04,共9个UINT16数据,寄存器地址为0,2~9,没有1)
    // #--提供PCS的FLOAT数据(Modbus地址从200,输入寄存器,功能码0x04,共25个FLOAT数据,寄存器地址为51~99)
    // #--提供PCS的BIT数据(Modbus地址从200,离散寄存器,功能码0x02,共4个数据,寄存器地址为1~4)
    int                 m_iProjectMode; //项目模式
};
#endif //APP_INI_FILE_H
